﻿//// ardlator.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
////
//#define TAG "MAIN"
//
//#include <coroutine> //C++ 20 协程库
//#include <chrono> //时间库
//#include <thread> //线程库
//#include <utils/ThreadPool.h>
//#include <utils/Log.h>
//#include <utils/EventBus.h>
//
//
//void sum(int a, int b)
//{
//    std::cout << "Hello:" << std::this_thread::get_id() << "-->"<<a << std::endl;
//    std::this_thread::sleep_for(std::chrono::seconds(10-a));
//    std::cout << "Hello World->"<<a<<"-->"<< ThreadPool::getInstance()->getTaskSize()<<std::endl;
//    //while (true)
//    //{
//
//    //}
//    //return a + b;
//}
//
//void test1(const IEventParam& param)
//{
//    std::cout << "Hello:test1" << param._params.has_value()<<std::endl;
//    std::cout << "Hello:test1" << param._params.type().name() << std::endl;
//}
//
//void test2(const IEventParam& param)
//{
//    std::cout << "Hello:test2" << param._params.has_value() << std::endl;
//    std::cout << "Hello:test2" << param._params.type().name() << std::endl;
//}
//int main(int argc, char* argv[])
//{
//
//    LogD("threadid:%d" << std::this_thread::get_id());
//    IEvent a1 =  IEvent("aa");
//    IEvent b1 =  IEvent("bb",500);
//    IEvent c1 =  IEvent(b1);
//
//    std::cout << (a1 == b1) << std::endl;
//    std::cout << (a1 == a1) << std::endl;
//
//    std::cout << (a1 < b1) << std::endl;
//    std::cout << (a1 < c1) << std::endl;
//   
//    //EventBus::getInstance()->subscribe(a1, (IEventFunc&)sum);
//    IEventFunc f = test1;
//    IEventFunc f1 = test2;
//
//    EventBus::getInstance()->subscribe(b1,f);
//    EventBus::getInstance()->subscribe(b1, f1);
//
//    //EventBus::getInstance()->notify(a1, { 5 });
//    //EventBus::getInstance()->notify(a1, {"a"});
//    EventBus::getInstance()->notify(b1, {._params = 1});
//    EventBus::getInstance()->notify(b1, {false});
//    EventBus::getInstance()->notify(b1, {a1});
//    EventBus::getInstance()->notify(b1, {});
//    EventBus::getInstance()->unSubscribe(b1);
//    EventBus::getInstance()->notify(b1, { 1 });
//    EventBus::getInstance()->notify(b1, { false });
//    EventBus::getInstance()->notify(b1, { a1 });
//    EventBus::getInstance()->notify(b1, {});
//
//    //auto hello = exam(); // 创建协程，返回与协程关联的对象
//    //auto hello1 = exam(); // 创建协程，返回与协程关联的对象
//    //std::cout << hello.get() << std::endl; // 输出协程返回的字符串
//    //std::cout << "Hello main!\n";
//    //while (true)
//    //{
//    //    using namespace std::chrono_literals;
//    //    std::this_thread::sleep_for(1s);
//    //    std::cout << "Hello main!:"<< hello.get()<<std::endl;
//    //    std::cout << "Hello1 main!:" << hello1.get() << std::endl;
//    //    hello.h.resume();
//    //    hello1.h.resume();
//    //}
//    //LogD("zzz%d"<<123);
//    //LogI("zzz%d" << 123);
//    //LogW("zzz%d" << 123);
//    //LogE("zzz%d" << 123);
//    //LogAD("zzz" << 123);
//    //LogD("threadid:1%d exit!"<< std::this_thread::get_id());
//    //ThreadPool *pool = ThreadPool::getInstance();
//    //pool->start();
//    ////std::this_thread::sleep_for(std::chrono::seconds(1));
//    //for (int i = 0; i < 10; ++i)
//    //{
//    //    std::future<void> res = pool->submitTask(sum, i, 2);
//    //   
//    //   // std::cout << res.get() << std::endl;
//    //}
//    //std::cout << "Hello main!\n";
//    //while (true)
//    //{
//
//    //}
//}
//
//// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
//// 调试程序: F5 或调试 >“开始调试”菜单
//
//// 入门使用技巧: 
////   1. 使用解决方案资源管理器窗口添加/管理文件
////   2. 使用团队资源管理器窗口连接到源代码管理
////   3. 使用输出窗口查看生成输出和其他消息
////   4. 使用错误列表窗口查看错误
////   5. 转到“项目”>“添加新项”以创建新的代码文件，或转到“项目”>“添加现有项”以将现有代码文件添加到项目
////   6. 将来，若要再次打开此项目，请转到“文件”>“打开”>“项目”并选择 .sln 文件
